package com.liwie.app;
//虚拟机栈线程私有
//堆线程共享
//虚拟机栈中以线程为单位
//虚拟机栈中的线程以main线程为主线程
//虚拟机栈中的线程里面有程序计数器【用于方法找到运行的行标】、栈帧集合【栈帧代表方法（局部变量表、返回地址）】

//线程对象java.lang.Thread
//1——在方法里面获取当前线程对象Thread.currentThread()

//创建线程1【线程的运行时，不同的线程抢夺时间片】
//1——继承Thread
//2——重写run方法
//3——调用start方法


//创建线程2【线程的运行时，不同的线程抢夺时间片】【建议使用这个，因此还有机会继承其他类】
//1——实现Runnable接口
//2——重写run方法
//3——使用Thread对象调用Runable对象
//4——使用Thread对象调用start方法
public class MyApp {

    public static class MyT1 extends Thread {
        @Override
        public void run() {
            MyApp myApp = new MyApp();
            myApp.fun2();
        }
    }
    public static class MyT2 implements Runnable {
        @Override
        public void run() {
            MyApp myApp = new MyApp();
            myApp.fun3();
//            while (true){
//                try {
//                    Thread.sleep(10000);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//            }
        }
    }
    public void fun1(){
        System.out.println("我fun1在[" + Thread.currentThread().getName() + "]线程里面");
        //fun2();
        System.out.println("fun1.........");
    }
    public  void fun2(){
        System.out.println("我fun2在[" + Thread.currentThread().getName() + "]线程里面");
        //fun3();
        System.out.println("fun2.........");
    }
    public  void fun3(){
        System.out.println("我fun3在[" + Thread.currentThread().getName() + "]线程里面");
        System.out.println("fun3.........");
    }

    public static void main(String[] args) {

        MyT1 myT1 = new MyT1();
        myT1.setName("线程MyT1");
        myT1.start();

        MyT2 myT2 = new MyT2();
        Thread thread= new Thread(myT2);
        thread.setName("线程MyT2");
        thread.start();

        MyApp myApp = new MyApp();
        myApp.fun1();


    }
}
